package org.jsola.hr.service;

import org.jsola.core.service.IService;
import org.jsola.hr.dao.IAttendShiftDAO;
import org.jsola.hr.dto.attendschedule.AttendScheduleSaveDTO;
import org.jsola.hr.dto.attendschedule.AttendScheduleUpdateDTO;
import org.jsola.hr.entity.AttendShiftDO;
import org.jsola.hr.vo.attendschedule.AttendScheduleVO;
import org.jsola.user.core.TokenUser;

/**
 * 考勤排班
 *
 * @author wxz
 */
public interface IAttendScheduleService extends IService<IAttendShiftDAO, AttendShiftDO> {

    /**
     * 新增考勤排班
     *
     * @param attendScheduleSaveDTO 考勤排班参数
     * @param tokenUser 当前用户
     * @return 勤排班ID
     */
    String save(AttendScheduleSaveDTO attendScheduleSaveDTO, TokenUser tokenUser);

    /**
     * 修改考勤排班
     *
     * @param attendScheduleUpdateDTO
     * @param tokenUser
     * @return
     */
    int update(AttendScheduleUpdateDTO attendScheduleUpdateDTO, TokenUser tokenUser);

    /**
     * 根据考勤规则ID查询考勤班次
     *
     * @param attendPlanId 考勤规则ID
     * @param siteId 所属站点ID
     * @return 考勤班次
     */
    AttendScheduleVO selectAttendPlanId(String attendPlanId, String siteId);

    /**
     * 保存考勤规则的时候更新考勤班次的考勤规则ID
     *
     * @param tmpAttendPlanId 临时考勤规则ID
     * @param attendPlanId 考勤规则ID
     * @param tokenUser 当前用户
     * @return
     */
    int saveRuleForSchedule(String tmpAttendPlanId, String attendPlanId, TokenUser tokenUser);


    /**
     * 当考勤班次的时间段修改了之后，重置今日的所有打卡记录
     *
     * @param attendPlanId
     * @param attendDateStr
     * @return
     * @param tokenUser 当前用户
     */
    int resetTodayPunchRecord(String attendPlanId, String attendDateStr, TokenUser tokenUser);
}
